package Trie字符串统计;

import java.util.Scanner;

public class Main {
    /*维护一个字符串集合，支持两种操作：
       I x 向集合中插入一个字符串 x；
       Q x 询问一个字符串在集合中出现了多少次。
       共有 N个操作，所有输入的字符串总长度不超过 1e5，字符串仅包含小写英文字母。*/
    /*输入格式
    第一行包含整数 N，表示操作数。
    接下来 N行，每行包含一个操作指令，指令为 I x 或 Q x 中的一种。*/
    static int N = 100010, idx;
    static int[][] son = new int[N][26];
    static int[] cnt = new int[N];

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int q = in.nextInt();
        in.nextLine();
        while (q-- > 0) {
            String[] s = in.nextLine().split(" ");
            if (s[0].equals("I")) {
                insert(s[1]);
            } else {
                System.out.println(query(s[1]));
            }
        }
    }

    private static int query(String str) {
        int p = 0;
        for (int i = 0; i < str.length(); i++) {
            int u = str.charAt(i) - 'a';
            if (son[p][u] == 0) {
                //该节点不存在，即该字符串不存在
                return 0;
            }
            p = son[p][u];
        }
        return cnt[p];
    }

    private static void insert(String str) {
        int p = 0;//类似指针，指向当前节点
        for (int i = 0; i < str.length(); i++) {
            int u = str.charAt(i) - 'a';//将字母转化为数字
            if (son[p][u] == 0) {
                //该节点不存在，创建节点,其值为下一个节点位置
                son[p][u] = ++idx;
            }
            p = son[p][u]; //使“p指针”指向下一个节点位置
        }
        cnt[p]++;//结束时的标记，也是记录以此节点结束的字符串个数
    }
}
